// 2014-02-01 Tyrghen
//---------------------------------------------
// Usage:
//  ["my_value_name",false] call edt_fnc_getVar;
//  ["my_marker_name",""] call edt_fnc_getVar;
//  ["reinforcement_group",grpNull] call edt_fnc_getVar;
//---------------------------------------------
// Purpose:
// Returns the value of a variable synchronised in JIP between all players and the server. This can be used to share the state of a task
// or to store persistent values that you want all players joining during the game to be aware of.
// The variable can be assigned using the edt_fnc_setVar function.
// 
// A typical case would be that you have a Trigger somewhere on your mission and when it gots activated, it will set a value.
// For example:
//    - Your trigger detects that Blufor have entered the zone
//    - The activation will call the following code: ["Blufor_In_Zone",true] edt_fnc_setVar;
//    - Then inside of one of your scripts, you will check that it happened like:
//			waituntil { ["Blufor_In_Zone",false] edt_fnc_getVar };
//			if (["Blufor_In_Zone",false] edt_fnc_getVar) then { ... };
// Using this method makes sure that when a user joins during the game, your script will run fine, even if at that time,
// there's no Blufor units in that zone anymore.
//
// Creating a trigger with an activation code like: BLUFOR_IN_ZONE = true; won't do the trick, because triggers are instancied locally and
// when the player will logs in, there's noone in the zone and the trigger won't activate on his computer, breaking the scripts depending on it.
//
// Parameters:
// - A string which is the Key of the Key/Value pair.
// - The default value given if the Key is not present in the dictionnary or has not yet been set.
//
// Returns:
// The current value bound with the key or the given default value
//---------------------------------------------
// Objectif:
// Renvoie la valeur d'une variable synchronisée en JIP entre tous les joueurs et le serveur. On peut l'utiliser pour partager l'état d'une tâche
// ou pour stocker une valeur persistente que l'on veut que chaque joueur se connectant en cours de partie puisse recevoir.
// La variable sera assignée en utilisant la fonction edt_fnc_setVar.
//
// Un exemple typique serait d'avoir un déclencheur (trigger) quelquepart sur la mission et quand il est activé, il assigne une valeur.
// Par exemple:
//    - Le déclencheur détecte que des Blufor entrent dans une zone
//    - L'activation va appeler le code suivant: ["Blufor_Dans_Zone",true] edt_fnc_setVar;
//    - Ensuite, dans un de vos scripts vous vérifiez que cet évènement s'est produit:
//			waituntil { ["Blufor_Dans_Zone",false] edt_fnc_getVar };
//			if (["Blufor_Dans_Zone",false] edt_fnc_getVar) then { };
// En utilisant cette méthode, vous êtes certain que lorsqu'un joueur se connecte en cours de partie, votre script va tourner comme il faut,
// même si au moment de la connexion il n'y a plus personne dans la zone du trigger.
//
// Créer un déclencheur avec un code d'activation comme: BLUFOR_DANS_ZONE = true; ne fonctionnera pas, parce que les déclencheurs sont instanciés localement
// et quand le joueur se connecte, il n'y a personne dans la zone, le déclencheur ne s'activera pas sur son PC.. et vos scripts seront foutus.
//
// Paramètres:
// - Une chaîne de caractère qui représente la clé de la paire clé/valeur.
// - Une valeur par défaut renvoyée si la clé n'existe pas ou si elle n'a pas encore été affectée.
//
// Renvoie:
// La valeur actuellement liée à la clé ou la valeur par défaut qui a été fournie
//---------------------------------------------

//#define __FORCE_TRACE__
//#define __FORCE_DEBUG__
//#define __FORCE_INFO__
#define THIS_FILE "editor\fn_getVar.sqf"
#include <tmf_constants.h>
#include <tmf_macros.h>

TRACE_1("Start",_this);
TMFPROFILERSTART;

private ["_key","_value","_default"];
DEFAULT_PARAM(_key,0,"");
DEFAULT_PARAM(_default,1,nil);
if (!(IS_STRING(_key))) then {
	if (IS_SCALAR(_key)) then {
		_key = format[TMF_EDITOR_OBJECTIVE,_key];
	} else {
		_key = str(_key);
	};
};
_value = ([TMF_SERVER_INSTANCE_ID,_key,_default] call FFUNC(getMissionVar));
TRACE_1("End",_value);
TMFPROFILERSTOP;
_value;